//
//  AFFNavbar.h
//  AnyfishApp
//
//  Created by Bob on 14-3-10.
//  Copyright (c) 2014年 Anyfish. All rights reserved.
//

#define DefaultStateBarColor [UIColor blackColor]
#define DefaultStateBarSytle UIBarStyleBlackOpaque

#import <UIKit/UIKit.h>
#import "AFFNavigationController.h"

/**
 按钮图片位置，文本默认暂用剩下所有空间
 */
typedef NS_ENUM(U8, AFFButtonImagePosition){
    /** 图片靠左，文本靠右居中 */
    EButtonImagePosition_Left,
    /** 图片靠右，文本靠左居中 */
    EButtonImagePosition_Right,
    /** 图片靠上，文本靠下居中 */
    EButtonImagePosition_Top,
    /** 图片靠下，文本靠上居中 */
    EButtonImagePosition_Bottom,
    /** 图片居中 */
    EButtonImagePosition_Center
};

#define kAFFBtn_Key_Img_Nor         @"img_nor"
#define kAFFBtn_Key_Img_Press       @"img_press"
#define kAFFBtn_Key_Img_Sel         @"img_sel"
#define kAFFBtn_Key_Title           @"title"
#define kAFFBtn_Key_Img_Frame       @"img_frame"
#define kAFFBtn_Key_Img_Width       @"img_width"
#define kAFFBtn_Key_Img_Height      @"img_height"
#define kAFFBtn_Key_Is_Back         @"Is_Back" // 特殊的处理返回按钮

#define kHeight_Nav_Icon                17.0f   // 图标大小
#define kNaviTitleTag                   99901


@interface AFFNavButton : UIButton

@property (nonatomic, readonly, assign) CGRect frame_Image;
@property (nonatomic, readonly, assign) CGRect frame_Label;

/**
 * 图片文本按钮，支持图片不同位置并排，文本跟随图片相对排列
 * @param frame     按钮大小
 * @param config    图片，文本配置：key:img_nor, img_press, title, img_frame
 */
- (instancetype)initWithFrame:(CGRect)frame position:(AFFButtonImagePosition)position config:(NSDictionary *)config;

@end


@interface AFFNavbar : UINavigationBar

/**< 适用于ios7*/
/** 导航栏样式 默认UIBarStyleBlackOpaque*/
@property (nonatomic, assign) UIBarStyle cusBarStyle;
/** 导航栏背景色 */
@property (nonatomic, strong) NSString *bgColorStr;

@property (nonatomic, strong) UIColor *bgColor;    ///< 背景色

@property (nonatomic, strong) UIColor *bgColorEx;    ///< 支持渐变的右边颜色，如果有才关心

@end


/**
 * @brief 自定义barbuttonitem
 *
 * @param
 * @return
 */

#define TitleColor [UIColor whiteColor]

// 默认的返回按钮

#define ItemWidth 40
#define ItemHeight kNavigationBar_Height-12
#define ItemLoadWidth 18
#define ItemTitleWidth 180
#define ItemTextFont 14

typedef void(^SelectedBlock)(NSObject *obj);
@class AFFRichTextView;
@interface UINavigationItem (CustomBarButtonItem)<UITableViewDataSource,UITableViewDelegate,UIGestureRecognizerDelegate>

@property (nonatomic, strong) AFFDataText *dataText;    ///< 富文本携带对象
@property (nonatomic, weak) AFFRichTextView *txtTitle;    ///< 显示标题
@property (nonatomic, assign) BOOL isLoading;    ///< 是否加载效果
@property (nonatomic, strong) NSMutableArray *arrItems;    ///< 选择使用
@property (nonatomic, strong) SelectedBlock block; ///< 选择使用
@property (nonatomic, strong) UIBarButtonItem *leftItem;    ///< 左边按钮
@property (nonatomic, strong) UIBarButtonItem *rightItem;    ///< 右边按钮

- (void)setLoading:(BOOL)start;

/** 主题变化后更新导航标题 */
- (void)setNewTitleConfig;

/**
 * 直接设置导航栏标题控件
 */
- (void)setNewTitleView:(UIView *)view;

/**
 * 设置导航栏标题
 * @param  dataText  富文本携带对象
 
 * @return
 */
- (void)setNewTitleWithDataText:(AFFDataText*)dataText;

/**
 * 设置导航栏标题，默认支持加载
 */
- (void)setNewTitle:(NSString *)title;
- (void)setNewTitle:(NSString *)title delay:(BOOL)delay;

/**
 设置导航栏标题，如果需要关闭加载才调用
 */
- (void)setNewTitle:(NSString *)title withLoadView:(BOOL)withLoadView;

/**
 设置导航栏标题，可添加加载动画，tagImg为右边的图标
 */
- (void)setNewTitleCircle:(NSString *)title target:(id)target action:(SEL)action;

/**
 * 设置导航栏标题
 * @param  title  标题文本
 * @param  tagImg  标题文字旁边的图标
 
 * @return
 */
- (void)setNewTitle:(NSString *)title tagImg:(NSString*)tagImg;

/**
 * 控制左右按钮是否显示
 * @param  isLeft  是否左边
 * @param  isHide  是否隐藏
 
 * @return   
 */
- (void)hideBarItem:(BOOL)isHide isLeft:(BOOL)isLeft;

/**
 * 导航栏左右控件自定义
 */
- (void)setItemWithView:(UIView*)view isLeft:(BOOL)isLeft;

/**
 * 导航栏标题点击，筛选功能
 * @param  items  列表数据源
 * @param  block  回调
 
 * @return
 */
- (void)setNewTitleSel:(AFFData*)dataSel items:(NSArray*)items withAll:(BOOL)withAll block:(void(^)(NSObject *obj))block;


- (void)setCircleBoxCount:(NSInteger)count;

/**
 * @function
 * 说明 设置导航栏导航按钮
 * @param target 归属
 * @param isLeft 是否左边
 * @param action 事件
 * @param title  标题
 * @param imageNor 默认图片
 * @param imagePress 点击图片
 * @param imageSel 选中图片
 
 * @return UIButton 可供外界控制
 */
- (UIButton*)setItemWithTarget:(id)target
                   isLeft:(BOOL)isLeft
                   action:(SEL)action
                    title:(NSString *)title
                 imageNor:(NSString *)imageNor;

- (void)setBackItemWithTarget:(id)target
                       action:(SEL)action
                        title:(NSString *)title;

- (void)setWebLeftItemWithTarget:(id)target action:(SEL)action1 action:(SEL)action2;
/**
 * 右边有2个按钮时使用
 * @param  target  归属
 * @param  action1 右边第一个btn(tag=222)，自定义size(40,40)
 * @param  image1  图片
 * @param  action2 右边第二个btn(tag=0)
 * @param  image2  图片
 
 * @return
 */
- (void)setRightItemWithTarget:(id)target
                       action1:(SEL)action1
                        image1:(NSString *)image1
                       action2:(SEL)action2
                        image2:(NSString *)image2;

/**
 * 左边触发侧边栏出现操作
 */
- (void)setLeftPanelItemWithTarget:(id)target
                            action:(SEL)action;


@end
